package com.sc.utils;

import lombok.extern.slf4j.Slf4j;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

/**
 * MD5EncodeUtil.java功能描述：MD5签名工具类
 *
 * @author chen.zhao 2018年12月18日 下午4:58:49
 */
@Slf4j
public class EncryptUtils {

    /**
     * 用MD5算法进行加密
     *
     * @param input 需要加密的字符串
     * @return MD5加密后的结果
     */
    public static String md5Hex(String input) {
        try {
            // 获取MD5实例
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 对输入字符串进行编码并更新摘要
            md.update(input.getBytes());

            // 获取128位的哈希值，即16个字节
            byte[] digestBytes = md.digest();

            // 将字节数组转换为16进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : digestBytes) {
                hexString.append(String.format("%02x", b));
            }

            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            log.error("ERROR MD5Util.md5Hex cause:", e);
            return "";
        }
    }

    private static String md5(String str) {

        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] bytes = md.digest(str.getBytes());
            // 将字节数组转为Base64字符串，这一步是可选的，根据你的需求决定是否转换
            return Base64.getEncoder().encodeToString(bytes);
        } catch (NoSuchAlgorithmException e) {
            log.error("ERROR MD5Util.md5 cause:", e);
            return "";
        }
    }

    public static void main(String[] args) {
        String md5Hex = md5Hex("fdsfere#$@");
        System.out.println("md5Hex.toUpperCase() = " + md5Hex.toUpperCase());
    }
}
